#include <iostream>
#include "valuation.h"
using namespace cdnf;

Valuation::Valuation() {
	values.push_back(false);
}

Valuation::Valuation(int numberOfVar) {
	for (int i = 0; i <= numberOfVar; i++)
		values.push_back(false);
}
void Valuation::clone(Valuation& valuation){
	for(int i = 1;i < valuation.size(); i++)
		values.push_back(valuation[i]);
}
bool Valuation::get(int index) {
//	assert(index > 0);
//	assert(index < size);
	return values[index];
}
bool Valuation::operator[](int index) {
//	assert(index > 0 & index < size);
	return values[index];
}
void Valuation::set(int index, bool value) {
//	assert(index > 0 & index < size);
	values[index] = value;
}
void Valuation::add(bool value) {
	values.push_back(value);
}
int Valuation::size() {
	return values.size();
}
bool Valuation::equals(Valuation& valuation) {
//	assert(values.size()==valuation.size());
	for (int i = 1; i < values.size(); i++)
		if (valuation.get(i) != this->get(i))
			return false;
	return true;
}
Valuation Valuation::xorValuation(Valuation& second) {
//	assert(values.size() == second.size());
	Valuation result;
	for (int i = 1; i < values.size(); i++) {
		result.add(values[i] ^ second.get(i));
	}
	return result;
}
void Valuation::print(){
	for(int i = 1; i < values.size(); i++){
		std::cout<<(values[i]?1:0);	
	}
	std::cout<<std::endl;
}

